﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

using DevExpress.XtraSplashScreen;
using DevExpress.XtraReports.UI;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid;

using prjKQXS_Report;
using prjKQXS_DLL;
using prjKQXS_DLL.Doanh_thu;

namespace prjKQXS_UI.View
{
    public partial class frmDoanhThu : XtraForm
    {
        #region Var =======================================================================
        private bool isLoad = false;
        private int focusRow = 0;

        /// <summary>
        /// Nếu vé truyền thống được tính tự động thì không cho phép nhập thủ công
        /// </summary>
        bool _allowEditTruyenThong = true;

        /// <summary>
        /// Giá trị biến này tự động được gán khi chọn cán bộ từ lueCanBo (-1 hoặc id của cán bộ tương ứng).
        /// </summary>
        int _DMCanBoID = -1;

        /// <summary>
        /// TenCB (Tên cán bộ) tự động được gán khi chọn cán bộ từ lueCanBo
        /// </summary>
        string _TenCB;

        /// <summary>
        /// Giá trị biến này tự động được gán là '%' khi chọn tất cả hoặc là mã đơn vị tương ứng khi chọn cán bộ từ lueDonVi
        /// </summary>
        char _MaDV = '%';

        /// <summary>
        /// TenDV (Tên đơn vị) tự động được gán khi chọn cán bộ từ lueDonVi
        /// </summary>
        string _TenDV;

        /// <summary>
        /// Biến này tự động được gán khi chọn từ deThang
        /// </summary>
        DateTime _Ngay;

        bool run_loadData;
        clsDoanhThu cls = new clsDoanhThu();
        bool isfistLoad = false;
        #endregion Var ====================================================================

        #region Form ======================================================================
        public frmDoanhThu()
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Maximized;

            ucDonVi1.lueDonVi.EditValueChanged += new EventHandler(lueDonVi_EditValueChanged);
            ucCanBo1.lueCanBo.EditValueChanged += new EventHandler(lueCanBo_EditValueChanged);

            cls.OnAction += new clsDoanhThu.OnActionHandler(cls_OnAction);
            cls.OnError += new clsDoanhThu.OnErrorHandler(cls_OnError);
        }

        private void frmDOANHTHU_Shown(object sender, EventArgs e)
        {
            setCaption();
            run_loadData = false;
            {
                deThang.DateTime = DateTime.Now;
            }
            //run_loadData = true;

            loadLueDonVi();
            cbtnSua.Enabled = cbtnSuaEnabled();
            sbtnTruyenDL.Enabled = clsCommon.hasPermission(BienTc.UserID, (int)BienTc.eFunction.B_TruyenDuLieuDoanhThuDaiLy);

        }

        /// <summary>
        /// Hàm này dùng để xác định xem có cho phép sử dụng nút Sửa hay không phụ thuộc vào QUYỀN và ngày hiện tại có phải là NGÀY CUỐI THÁNG hay không
        /// </summary>
        /// <returns></returns>
        private bool cbtnSuaEnabled()
        {
            bool enabled = false;

            if (clsCommon.hasPermission(BienTc.UserID, (int)BienTc.eFunction.B_SuaDoanhThuDaiLy))   //Nếu có quyền dùng nút sửa
            {
                if (BienTc.isQuanHuyen || BienTc.isThanhPho)    //Nếu là client...
                {
                    if (DateTime.Now.Date == _Ngay.Date) enabled = true;    //... thì chỉ cho phép vào ngày cuối tháng
                }
                else enabled = true;    //Nếu là server thì cho phép dùng vào bất cứ ngày nào 
            }
            else enabled = false;

            return enabled;
        }

        #region ProcessCmdKey
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.F2)
            {
                if (cbtnSuaEnabled()) cbtnSua.Checked = !cbtnSua.Checked;
            }
            else if (keyData == Keys.F3 || keyData == Keys.F4 || keyData == Keys.F5 || keyData == Keys.F6 || keyData == Keys.F8)
            {
                if (cbtnSuaEnabled())
                {
                    cbtnSua.Checked = true;

                    string fieldname =
                        keyData == Keys.F3 ? gcolTruyenThong.FieldName :
                        keyData == Keys.F4 ? gcolBoc.FieldName :
                        keyData == Keys.F5 ? gcolCapSo.FieldName :
                        keyData == Keys.F6 ? gcolLoTo234.FieldName : "ALL";

                    setColumnEdit(fieldname);
                }
            }
            else if (keyData == Keys.F9)
            {
                if (sbtnIn.Enabled) sbtnIn_Click(sbtnIn, null);
            }
            else if (keyData == Keys.F12)
            {
                btnDong_Click(btnDong, null);
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }
        #endregion
        #endregion Form ===================================================================


        #region Buttons ===================================================================
        private void cbtnSua_CheckedChanged(object sender, EventArgs e)
        {
            if (cbtnSua.Checked)
            {
                cbtnSua.Text = "F2. &Khóa";
                enableControl(true);
                abgvDoanhThu.OptionsBehavior.Editable = true;
                setColumnEdit("ALL");
            }
            else
            {
                cbtnSua.Text = "F2. &Sửa";
                abgvDoanhThu.OptionsBehavior.Editable = false;
                chkKhoiPhuc.Checked = false;
                enableControl(false);
            }
        }

        private void sbtnKhoiPhuc_Click(object sender, EventArgs e)
        {
            if (gcDoanhThu.DataSource != null && ((DataTable)gcDoanhThu.DataSource).Rows.Count > 0)
            {
                if (clsCommon.MsgBox("Khôi phục dòng này?", 2) == System.Windows.Forms.DialogResult.Yes)
                {
                    cls.Restore((int)abgvDoanhThu.GetFocusedDataRow()["ID"]);
                    loadData();
                }

            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (chkKhoiPhuc.Checked)
            {
                if (gcDoanhThu.DataSource != null && ((DataTable)gcDoanhThu.DataSource).Rows.Count > 0)
                {
                    if (clsCommon.MsgBox("Ở chế độ khôi phục sẽ bị xóa hoàn toàn khỏi hệ thống, bạn có chắc chắn xóa dòng này ?", 2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        cls.Delete(abgvDoanhThu.GetFocusedDataRow()["ID"].ToString(), false);
                    }
                }
            }
            else
            {
                if (gcDoanhThu.DataSource != null && ((DataTable)gcDoanhThu.DataSource).Rows.Count > 0)
                {
                    if (clsCommon.MsgBox("Bạn có chắc chắn muốn xóa dòng này ?", 2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        cls.Delete(abgvDoanhThu.GetFocusedDataRow()["ID"].ToString(), true);
                    }
                }
            }

            loadData();
        }

        private void btnChuyenDL_Click(object sender, EventArgs e)
        {
            if (clsCommon.MsgBox("Chuyển dữ liệu ngày " + _Ngay + "?", 2) == DialogResult.Yes)
            {
                frmChuyenDuLieu frm = new frmChuyenDuLieu(_Ngay, _MaDV);
                frm.ShowDialog();
            }
        }

        private void sbtnIn_Click(object sender, EventArgs e)
        {
            SplashScreenManager.ShowForm(typeof(frmWaitForm));

            string isCap = "";
            if (_MaDV == '%') isCap = "CTY";
            else isCap = _DMCanBoID == -1 ? "QH" : "CB";

            DateTime TuNgay = new DateTime(_Ngay.Year, _Ngay.Month, 1);
            DateTime DenNgay = new DateTime(_Ngay.Year, _Ngay.Month, DateTime.DaysInMonth(_Ngay.Year, _Ngay.Month));

            rptMauHH01x rpt = new rptMauHH01x();
            rpt.OnLoadComplete += new rptMauHH01x.OnLoadCompleteHandler(rpt_OnLoadComplete);
            rpt.xrlblDonVi.Text = _MaDV == '%' ? "" : "PHÒNG XSKT " + _TenDV.ToUpper();
            rpt.xrlblKyTen2.Visible = _MaDV != '%';
            rpt.xrlblKyTen3.Text = _MaDV == '%' ? "KẾ TOÁN" : "PHÒNG XSKT " + _TenDV.ToUpper();
            rpt.Parameters["pFormName"].Value = this.Name;
            rpt.Parameters["pCap"].Value = isCap;
            rpt.Parameters["pMaDV"].Value = _MaDV;
            rpt.Parameters["pDMCanBoID"].Value = _DMCanBoID;
            rpt.Parameters["pTenCB"].Value = _TenCB;
            rpt.Parameters["pTuNgay"].Value = TuNgay;
            rpt.Parameters["pDenNgay"].Value = DenNgay;
            rpt.Parameters["pDaiLyThiTran"].Value = false;
            rpt.ShowRibbonPreviewDialog();
        }

        private void btnXoaall_Click(object sender, EventArgs e)
        {
            if (_DMCanBoID == -1)
            {
                clsCommon.MsgBox("Bạn cần chọn cán bộ trước khi xóa ", 0);
            }
            else
            {
                if (chkKhoiPhuc.Checked)
                {
                    if (gcDoanhThu.DataSource != null && ((DataTable)gcDoanhThu.DataSource).Rows.Count > 0)
                    {
                        string s = "Ở chế độ khôi phục doanh thu trong ngày của cán bộ " + ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString() +
                            " sẽ bị xóa hoàn toàn khỏi hệ thống, bạn có c hắc chắn xóa dòng này ?";
                        if (clsCommon.MsgBox(s, 2) == System.Windows.Forms.DialogResult.Yes)
                        {
                            cls.DeleteAll(_DMCanBoID, _Ngay, false);
                        }
                    }
                }
                else
                {
                    if (gcDoanhThu.DataSource != null && ((DataTable)gcDoanhThu.DataSource).Rows.Count > 0)
                    {
                        if (clsCommon.MsgBox("Bạn có chắc chắn muốn xóa doanh thu của cán bộ " +
                            ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString() + " này ?", 2) == System.Windows.Forms.DialogResult.Yes)
                        {
                            cls.DeleteAll(_DMCanBoID, _Ngay, true);
                        }
                    }
                }

                loadData();
            }
        }

        private void btnKPAll_Click(object sender, EventArgs e)
        {
            if (_DMCanBoID == -1)
            {
                clsCommon.MsgBox("Bạn cần chọn cán bộ trước khi khôi phục lại ", 0);
            }
            else
            {
                if (gcDoanhThu.DataSource != null && ((DataTable)gcDoanhThu.DataSource).Rows.Count > 0)
                {
                    if (clsCommon.MsgBox("Bạn có chắc chắn muốn khôi phục doanh thu của cán bộ " +
                        ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString() + " này ?", 2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        cls.RestoreAll(_DMCanBoID, _Ngay);
                        loadData();
                    }
                }
            }
        }

        private void btnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void sbtnLoc_Click(object sender, EventArgs e)
        {
            if (sbtnLoc.Tag.Equals("LOC"))
            {
                sbtnLoc.Tag = "BL";
                sbtnLoc.Text = "&Bỏ lọc";
                abgvDoanhThu.OptionsView.ShowAutoFilterRow = true;
            }
            else
            {
                abgvDoanhThu.OptionsView.ShowAutoFilterRow = false;
                sbtnLoc.Tag = "LOC";
                sbtnLoc.Text = "&Lọc";
                abgvDoanhThu.ClearColumnsFilter();
            }
        }
        #endregion Buttons ================================================================


        #region GridView ==================================================================
        private void gcDoanhThu_ProcessGridKey(object sender, KeyEventArgs e)
        {
            if (abgvDoanhThu.IsEditing && (e.KeyCode.ToString() == "Return")
                && (abgvDoanhThu.FocusedColumn.Name == "gcolCapSo"))    //Nếu đang sửa mà nhấn phím Enter tại cột Cặp số...
                if (abgvDoanhThu.FocusedRowHandle + 1 < abgvDoanhThu.RowCount)  //...nếu không phải là dòng cuối cùng thì nhảy xuống dòng tiếp theo tại cột Truyền thống.
                {
                    abgvDoanhThu.FocusedRowHandle = abgvDoanhThu.FocusedRowHandle + 1;
                    abgvDoanhThu.FocusedColumn = _allowEditTruyenThong ? gcolTruyenThong : gcolBoc;
                    abgvDoanhThu.ShowEditor();
                    e.Handled = true;
                }
        }

        private void gcDoanhThu_Resize(object sender, EventArgs e)
        {
            grcDonVi.Width = (gcDoanhThu.Width / 2) - 5;
            grcCanBo.Width = (gcDoanhThu.Width / 2) - 5;
            grcCanBo.Left = ((gcDoanhThu.Width + gcDoanhThu.Left) / 2) + 10;
        }

        private void abgvDoanhThu_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e)
        {
            e.TotalValue = 0;
        }

        private void abgvDoanhThu_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            if (!isLoad)
            {
                focusRow = e.FocusedRowHandle;
            }

            //Tự động tính giá trị các cột Lô tô, Tổng doanh thu, Hoa hồng, Tỷ lệ
            if (e.PrevFocusedRowHandle >= 0 && abgvDoanhThu.RowCount > 0)
            {
                try
                {
                    decimal TruyenThong = (decimal)clsCommon.Parse(abgvDoanhThu.GetRowCellValue(e.PrevFocusedRowHandle, "Truyen_Thong").ToString(), 3);
                    decimal Boc = (decimal)clsCommon.Parse(abgvDoanhThu.GetRowCellValue(e.PrevFocusedRowHandle, "Boc").ToString(), 3);
                    decimal LoTo = (decimal)clsCommon.Parse(abgvDoanhThu.GetRowCellValue(e.PrevFocusedRowHandle, "LoTo234").ToString(), 3) +
                        (decimal)clsCommon.Parse(abgvDoanhThu.GetRowCellValue(e.PrevFocusedRowHandle, "CapSo").ToString(), 3);

                    abgvDoanhThu.SetRowCellValue(e.PrevFocusedRowHandle, "LoTo", LoTo);

                    decimal TongDT = TruyenThong + Boc + LoTo;
                    abgvDoanhThu.SetRowCellValue(e.PrevFocusedRowHandle, "Tong_DoanhThu", TongDT);

                    decimal hoahong = clsDoanhThu.HoaHong(abgvDoanhThu.GetRowCellValue(e.PrevFocusedRowHandle, "isBanRong"), TruyenThong, LoTo, Boc);
                    abgvDoanhThu.SetRowCellValue(e.PrevFocusedRowHandle, "Hoa_Hong", hoahong);

                    decimal doanhthu = (decimal)clsCommon.Parse(abgvDoanhThu.GetRowCellValue(e.PrevFocusedRowHandle, "Doanh_Thu").ToString(), 3);
                    if (doanhthu == 0) doanhthu = 1;
                    decimal tyLe = Math.Round(TongDT / doanhthu * 100, 1);
                    abgvDoanhThu.SetRowCellValue(e.PrevFocusedRowHandle, "Ty_Le", tyLe);
                }
                catch (NullReferenceException ex)
                {
                    //Nếu gặp lỗi loại này thì bỏ qua :)
                }
            }
        }

        private void abgvDoanhThu_CustomDrawFooterCell(object sender, DevExpress.XtraGrid.Views.Grid.FooterCellCustomDrawEventArgs e)
        {
            int dx = e.Bounds.Height;
            Brush brush = e.Cache.GetGradientBrush(e.Bounds, Color.LightGray, Color.White,
              LinearGradientMode.Vertical);
            Rectangle r = e.Bounds;
            ////Create a raised effect for a cell
            ControlPaint.DrawBorder3D(e.Graphics, r, Border3DStyle.RaisedInner);
            ////Fill the inner region of the cell
            r.Inflate(-1, -1);
            e.Graphics.FillRectangle(brush, r);
            ////Draw a summary value
            r.Inflate(-2, 0);

            //  e.Info.Appearance.DrawBackground(Graphics.)
            e.Appearance.DrawString(e.Cache, clsCommon.formatNumber((decimal)clsCommon.Parse(e.Info.DisplayText, 3), "###,##"), r);
            e.Appearance.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold);
            //Prevent default drawing of the cell
            e.Handled = true;
        }

        private void abgvDoanhThu_HiddenEditor(object sender, EventArgs e)
        {
            if (abgvDoanhThu.FocusedRowHandle != GridControl.AutoFilterRowHandle)
            {
                decimal Boc, LoTo, TruyenThong, TongDT = 0;
                TruyenThong = clsCommon.getDecimal(abgvDoanhThu.GetFocusedRowCellValue("TThong"));
                Boc = clsCommon.getDecimal(abgvDoanhThu.GetFocusedRowCellValue("Boc"));
                LoTo = clsCommon.getDecimal(abgvDoanhThu.GetFocusedRowCellValue("LoTo234")) + clsCommon.getDecimal(abgvDoanhThu.GetFocusedRowCellValue("CapSo"));
                abgvDoanhThu.SetFocusedRowCellValue("LoTo", LoTo);

                decimal hoahong = 0, tyLe = 0;
                decimal doanhthu = clsCommon.getDecimal(abgvDoanhThu.GetFocusedRowCellValue("DoanhThu"));
                clsDoanhThu.fill_TongDT_HoaHong_TyLe(abgvDoanhThu.GetFocusedRowCellValue("isBanRong"), doanhthu, TruyenThong, Boc, LoTo, ref TongDT, ref hoahong, ref tyLe);

                abgvDoanhThu.SetFocusedRowCellValue("TongDT", TongDT);
                abgvDoanhThu.SetFocusedRowCellValue("HoaHong", hoahong);
                abgvDoanhThu.SetFocusedRowCellValue("TyLe", tyLe);
            }
        }

        private void abgvDoanhThu_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            DataRow dr = abgvDoanhThu.GetDataRow(e.RowHandle);

            if (dr != null)
            {
                if (dr["TThong"] != DBNull.Value || dr["Boc"] != DBNull.Value || dr["LoTo"] != DBNull.Value)
                {
                    if (dr["ID"] == DBNull.Value)
                        abgvDoanhThu.SetRowCellValue(e.RowHandle, "ID", cls.Insert(dr, _Ngay, _allowEditTruyenThong)); //Thực hiện insert
                    else
                        cls.Update(dr, _Ngay, _allowEditTruyenThong);   //Thực hiện update
                }
            }

            countTT_B_LT();
        }
        #endregion GridView ===============================================================


        #region Other controls ============================================================
        private void lueDonVi_EditValueChanged(object sender, EventArgs e)
        {
            string madv = ucDonVi1.lueDonVi.GetColumnValue("Ma_DT").ToString().Trim();
            _MaDV = madv == "TC" ? '%' : Convert.ToChar(madv);
            _TenDV = ucDonVi1.lueDonVi.GetColumnValue("Ten_DT").ToString().Trim();

            loadLueCanBo();

            if (ucDonVi1.lueDonVi.ItemIndex != 0 && ucDonVi1.lueDonVi.ItemIndex != -1)
                ucCanBo1.lueCanBo.Properties.ReadOnly = false;
            else
                ucCanBo1.lueCanBo.Properties.ReadOnly = true;

            grcDonVi.Text = string.Format("{0} có --- {1} --- đại lý", _TenDV,abgvDoanhThu.RowCount);
            sbtnTruyenDL.Enabled = _MaDV != '%';
        }

        private void lueCanBo_EditValueChanged(object sender, EventArgs e)
        {
            _DMCanBoID = Convert.ToInt32(ucCanBo1.lueCanBo.GetColumnValue("ID"));
            _TenCB = ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString().Trim();

             loadData();
            if (abgvDoanhThu.RowCount > 0 && cbtnSua.Checked)
            {
                abgvDoanhThu.FocusedRowHandle = 0;
                abgvDoanhThu.FocusedColumn = gcolTruyenThong;
                abgvDoanhThu.ShowEditor();
            }

            grcCanBo.Text = string.Format("{0} có --- {1} --- đại lý", _TenCB , abgvDoanhThu.RowCount);
        }

        private void chkNhap_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            if (_Ngay > DateTime.Now.Date)
            {
                MessageBox.Show("Không được phép nhập trước ngày hiện tại. Vui lòng chọn lại ngày nhập.");
                e.Cancel = true;
                return;
            }

            if (_MaDV == '%')
            {
                clsCommon.MsgBox("Bạn cần chọn đơn vị trước khi nhập!", 0);
                e.Cancel = true;
                return;
            }
            else if (_DMCanBoID == -1)
            {
                clsCommon.MsgBox("Bạn cần chọn cán bộ trước khi nhập!", 0);
                e.Cancel = true;
            }
        }

        private void chkKhoiPhuc_CheckedChanged(object sender, EventArgs e)
        {
            if (chkKhoiPhuc.Checked)
            {
                sbtnKhoiPhuc.Tag = "KP";
                sbtnKhoiPhuc.Text = "&Khôi phục";
            }
            sbtnKhoiPhuc.Enabled = chkKhoiPhuc.Checked;
            btnKPAll.Enabled = chkKhoiPhuc.Checked;
            //chkNhap.Enabled = !chkKhoiPhuc.Checked;
            //sbtnIn.Enabled = !chkKhoiPhuc.Checked;
            loadData();
        }
        private DataTable dtDonVi ;
        private void ActiveEnableDate(bool isEnable)
        {
            ucCanBo1.lueCanBo.Properties.ReadOnly = !isEnable;
          
           
            cbtnSua.Enabled = isEnable;
            sbtnLoc.Enabled = isEnable;
            btnXoa.Enabled = isEnable;
            sbtnIn.Enabled = isEnable;
            sbtnTruyenDL.Enabled = isEnable;
            btnXoaall.Enabled = isEnable;
            btnKPAll.Enabled = isEnable;
            chkKhoiPhuc.Enabled = isEnable;
            sbtnKhoiPhuc.Enabled = isEnable;
        }
        private void deThang_EditDateModified(object sender, EventArgs e)
        {
            if (!isfistLoad){
               // loadLueCanBo();
                isfistLoad = true;
                ActiveEnableDate(false);
            }
            else
            {
                
                DateTime d = deThang.DateTime;
                int day = DateTime.DaysInMonth(d.Year, d.Month);
                gcDoanhThu.DataSource = new DataTable();
                // chi load dữ liệu ngày cuối tháng
                if (d.Day == day)
                {
                    _Ngay = new DateTime(d.Year, d.Month, day);
                    deThang.DateTime = _Ngay;
                    grcNgay.Text = _Ngay.ToString("dd/MM/yyyy");
                    if (run_loadData)
                    {
                        loadData();
                        updateCount();
                    }
                    //loadLueCanBo();
                    //loadLueDonVi();
                    if (BienTc.isQuanHuyen || BienTc.isThanhPho)
                    {
                        ucDonVi1.lueDonVi.Properties.DataSource = clsCommon.load_lueDonVi();
                        ucDonVi1.lueDonVi.ItemIndex = ucDonVi1.lueDonVi.Properties.GetDataSourceRowIndex("Ma_DT", BienTc.ma_huyen == "" ? "TC" : BienTc.ma_huyen);
                        ucDonVi1.lueDonVi.Properties.ReadOnly = true;
                        ucCanBo1.lueCanBo.Properties.DataSource = clsCommon.load_lueCanBo(_MaDV);
                        ucCanBo1.lueCanBo.ItemIndex = 0;
                        lueCanBo_EditValueChanged(null, null);
                    }ActiveEnableDate(true);

                }
                else {

                    ActiveEnableDate(false);
                }
            }
        }

        private void riceBanRong_CheckedChanged(object sender, EventArgs e)
        {
            abgvDoanhThu.CloseEditor(); //Lệnh này giúp giá trị của ô tại cột Bán rong cập nhật ngay lập tức
        }
        #endregion Other controls =========================================================


        #region Subs and Functions ========================================================
        private void rpt_OnLoadComplete()
        {
            SplashScreenManager.CloseForm();
        }

        private void updateCount()
        {
            //Cập nhật hiển thị số lượng:
            //- Nếu đơn vị = Công ty => cập nhật cả 2;
            //- Nếu đơn vị != Công ty:
            //      + Cán bộ =  Tất cả   => cập nhật cả 2;
            //      + Cán bộ != Tất cả   => cập nhật cán bộ, đơn vị để trống (vì trường hợp này ta không thể xác định được số lượng của đơn vị là bao nhiêu).
            if (_MaDV == '%'
                || _MaDV != '%' & _DMCanBoID == -1)
            {
                grcDonVi.Text = string.Format("{0} có --- {1} --- đại lý", _TenDV, abgvDoanhThu.RowCount);
                grcCanBo.Text = string.Format("{0} có --- {1} --- đại lý", _TenCB, abgvDoanhThu.RowCount);
            }
            else
            {
                grcDonVi.Text = "";
                grcCanBo.Text = abgvDoanhThu.RowCount.ToString();
            }
        }

        #region cls event --------------------------------------------
        private void cls_OnAction(SqlException e)
        {
            cls_OnError(e);
        }

        private void cls_OnError(Exception e)
        {
            XtraMessageBox.Show("Một lỗi chưa được xử lý đã xảy ra. Chi tiết lỗi: \n" + e.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        #endregion ---------------------------------------------------

        private void loadLueDonVi()
        {
            dtDonVi = clsCommon.load_lueDonVi();
            ucDonVi1.lueDonVi.Properties.DataSource = dtDonVi;
            if (BienTc.isQuanHuyen || BienTc.isThanhPho || !clsCommon.hasPermission(BienTc.UserID, (int)BienTc.eFunction.L_DonVi))
            {
                ucDonVi1.lueDonVi.ItemIndex = ucDonVi1.lueDonVi.Properties.GetDataSourceRowIndex("Ma_DT", BienTc.ma_huyen == "" ? "TC" : BienTc.ma_huyen);
                if (BienTc.isQuanHuyen || BienTc.isThanhPho) ucDonVi1.lueDonVi.Properties.ReadOnly = true;
            }
            else
            {               
                //ucDonVi1.lueDonVi.ItemIndex = 0;
            }
        }

        private void enableControl(bool state)
        {
            //if (BienTc.isMayChu())
            //{
                btnXoa.Enabled = state;
                btnXoaall.Enabled = state;
            //}
            //else
            //{
            //    btnXoa.Enabled = false;
            //    btnXoaall.Enabled = false;
            //}

            //chkNhap.Enabled = state && allowEditTruyenThong;
            chkKhoiPhuc.Enabled = state;
            //sbtnIn.Enabled = state;
        }

        private void loadData()
        {
            SplashScreenManager.ShowForm(typeof(frmWaitForm));
            {
                bool autoTruyenThong = false;
                // Kiem tra lai cho load cho thang ko co du lieu
                DataTable dt = cls.loadData_frmDoanhThu(_MaDV, _DMCanBoID, _Ngay, chkKhoiPhuc.Checked, ref autoTruyenThong);
                _allowEditTruyenThong = !autoTruyenThong;

                gcDoanhThu.DataSource = dt;
                gcolTruyenThong.AppearanceHeader.ForeColor = _allowEditTruyenThong ? Color.Black : Color.Gray;

                _countTT = 0;
                _countBoc = 0;
                _countCapSo = 0;
                _countLT234 = 0;
                _countLT = 0;
                setCaption();
                countTT_B_LT();
            }
            SplashScreenManager.CloseForm();
        }

        private void setCaption()
        {
            gcolTruyenThong.Caption = string.Format("F3 - T.Thống\n({0})", _countTT);
            gcolBoc.Caption = string.Format("F4 - Bóc\n({0})", _countBoc);
            gcolCapSo.Caption = string.Format("F5 - Cặp số\n({0})", _countCapSo);
            gcolLoTo234.Caption = string.Format("F6 - LT234\n({0})", _countLT234);
            gcolLoTo.Caption = string.Format("Lô tô\n({0})", _countLT);
        }

        int _countTT = 0;
        int _countBoc = 0;
        int _countCapSo = 0;
        int _countLT234 = 0;
        int _countLT = 0;
        private void countTT_B_LT()
        {
            DataTable dt = (DataTable)gcDoanhThu.DataSource;

            if (dt.Rows.Count > 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    if (!string.IsNullOrEmpty(row[gcolTruyenThong.FieldName].ToString().Trim())
                        && (decimal)clsCommon.Parse(row[gcolTruyenThong.FieldName].ToString().Trim(), 3) != 0)
                    {
                        _countTT++;
                    }

                    if (!string.IsNullOrEmpty(row[gcolBoc.FieldName].ToString().Trim())
                        && (decimal)clsCommon.Parse(row[gcolBoc.FieldName].ToString().Trim(), 3) != 0)
                    {
                        _countBoc++;
                    }

                    if (!string.IsNullOrEmpty(row[gcolLoTo.FieldName].ToString().Trim())
                        && (decimal)clsCommon.Parse(row[gcolLoTo.FieldName].ToString().Trim(), 3) != 0)
                    {
                        _countLT++;
                    }

                    if (!string.IsNullOrEmpty(row[gcolLoTo234.FieldName].ToString().Trim())
                        && (decimal)clsCommon.Parse(row[gcolLoTo234.FieldName].ToString().Trim(), 3) != 0)
                    {
                        _countLT234++;
                    }

                    if (!string.IsNullOrEmpty(row[gcolCapSo.FieldName].ToString().Trim())
                        && (decimal)clsCommon.Parse(row[gcolCapSo.FieldName].ToString().Trim(), 3) != 0)
                    {
                        _countCapSo++;
                    }
                }
            }
            else
            {
                _countTT = 0;
                _countBoc = 0;
                _countCapSo = 0;
                _countLT234 = 0;
                _countLT = 0;
            }

            setCaption();
        }

        private void loadLueCanBo()
        {
            ucCanBo1.lueCanBo.Properties.DataSource = clsCommon.load_lueCanBo(_MaDV);
            if (ucCanBo1.lueCanBo.ItemIndex != 0) ucCanBo1.lueCanBo.ItemIndex = 0;
            else lueCanBo_EditValueChanged(null, null);
        }

        public void formatString(TextEdit textBox)
        {
            if (!string.IsNullOrEmpty(textBox.Text))
            {
                System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("vi-VN");
                decimal valueBefore = decimal.Parse(textBox.Text, System.Globalization.NumberStyles.AllowDecimalPoint);
                textBox.Text = String.Format(culture, "{0:N0}", valueBefore);
                textBox.Select(textBox.Text.Length, 0);
            }
        }

        /// <summary>
        /// Truyền vào "ALL" nếu nhập tất cả 4 cột, hoặc nhập cột nào thì truyền vào field name của cột đó.
        /// </summary>
        /// <param name="fieldName"></param>
        private void setColumnEdit(string fieldName)
        {

            abgvDoanhThu.Focus();

            gcolTruyenThong.OptionsColumn.AllowEdit = fieldName == "ALL" ? _allowEditTruyenThong : gcolTruyenThong.FieldName == fieldName && _allowEditTruyenThong;
            gcolTruyenThong.OptionsColumn.AllowFocus = fieldName == "ALL" ? _allowEditTruyenThong : gcolTruyenThong.FieldName == fieldName && _allowEditTruyenThong;

            gcolBoc.OptionsColumn.AllowFocus = fieldName == "ALL" ? true : gcolBoc.FieldName == fieldName;
            gcolBoc.OptionsColumn.AllowEdit = fieldName == "ALL" ? true : gcolBoc.FieldName == fieldName;

            gcolLoTo234.OptionsColumn.AllowFocus = fieldName == "ALL" ? true : gcolLoTo234.FieldName == fieldName;
            gcolLoTo234.OptionsColumn.AllowEdit = fieldName == "ALL" ? true : gcolLoTo234.FieldName == fieldName;

            gcolCapSo.OptionsColumn.AllowFocus = fieldName == "ALL" ? true : gcolCapSo.FieldName == fieldName;
            gcolCapSo.OptionsColumn.AllowEdit = fieldName == "ALL" ? true : gcolCapSo.FieldName == fieldName;

            abgvDoanhThu.FocusedRowHandle = 0;
            abgvDoanhThu.FocusedColumn = abgvDoanhThu.Columns[fieldName == "ALL" ? (_allowEditTruyenThong ? gcolTruyenThong.FieldName : gcolBoc.FieldName) : fieldName];
        }
        #endregion Subs and Functions =====================================================
    }
}